package com.luo.gmall.ums.controller;

import java.util.List;

import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.luo.gmall.ums.entity.UserEntity;
import com.luo.gmall.ums.service.UserService;
import com.luo.gmall.common.bean.PageResultVo;
import com.luo.gmall.common.bean.ResponseVo;
import com.luo.gmall.common.bean.PageParamVo;


/**
 * 用户表
 *
 * @author zoro
 * @email 1160848022@qq.com
 * @date 2021-11-01 20:49:42
 */
@Api(tags = "用户表 管理")
@RestController
@RequestMapping("ums/user")
public class UserController {

    @Autowired
    private UserService userService;


    /**
     * 7.根据用户id查询用户
     */
    @GetMapping("get/{userId}")
    public ResponseVo<UserEntity> queryUserByUserId(@PathVariable("userId") Long userId) {
        UserEntity userEntity = userService.getById(userId);
        return ResponseVo.ok(userEntity);
    }


    /**
     * 查询功能，根据参数中的登录名（用户名/手机号/邮箱）和密码查询指定用户
     */
    @GetMapping("query")
    public ResponseVo<UserEntity> queryUser(
            @RequestParam String loginName,
            @RequestParam String password) {
        UserEntity userEntity = userService.queryUser(loginName, password);
        return ResponseVo.ok(userEntity);
    }

    /**
     * 实现用户注册功能，需要对用户密码进行加密存储，使用MD5加密，
     * 加密过程中使用随机码作为salt加盐。另外还需要对用户输入的短信验证码进行校验。
     */
    @PostMapping("register")
    public void register(UserEntity userEntity, @RequestParam("code") String code) {
        userService.register(userEntity, code);

    }


    /**
     * 根据用户输入的手机号，生成随机验证码，长度为6位，纯数字。并且调用短信服务，
     * 发送验证码到用户手机。
     * 异步发送短信
     */
    @PostMapping("code")
    public void sendCode(@RequestParam("phone") String phone) {
        userService.sendCode(phone);
    }


    /**
     * 实现用户数据的校验，主要包括对：手机号、用户名的唯一性校验。
     */
    @GetMapping("/check/{data}/{type}")
    public ResponseVo<Boolean> dataCheck(
            @PathVariable("data") String data,
            @PathVariable("type") Integer type) {
        Boolean isAvailable = userService.dataCheck(data, type);
        return ResponseVo.ok(isAvailable);
    }


    /**
     * 列表
     */
    @GetMapping
    @ApiOperation("分页查询")
    public ResponseVo<PageResultVo> queryUserByPage(PageParamVo paramVo) {
        PageResultVo pageResultVo = userService.queryPage(paramVo);

        return ResponseVo.ok(pageResultVo);
    }


    /**
     * 信息
     */
    @GetMapping("{id}")
    @ApiOperation("详情查询")
    public ResponseVo<UserEntity> queryUserById(@PathVariable("id") Long id) {
        UserEntity user = userService.getById(id);

        return ResponseVo.ok(user);
    }

    /**
     * 保存
     */
    @PostMapping
    @ApiOperation("保存")
    public ResponseVo<Object> save(@RequestBody UserEntity user) {
        userService.save(user);

        return ResponseVo.ok();
    }

    /**
     * 修改
     */
    @PostMapping("/update")
    @ApiOperation("修改")
    public ResponseVo update(@RequestBody UserEntity user) {
        userService.updateById(user);

        return ResponseVo.ok();
    }

    /**
     * 删除
     */
    @PostMapping("/delete")
    @ApiOperation("删除")
    public ResponseVo delete(@RequestBody List<Long> ids) {
        userService.removeByIds(ids);

        return ResponseVo.ok();
    }

}
